package it.traveldream.EJB.DTO;


import it.traveldream.EJB.utilities.Utility;

import java.util.ArrayList;
import java.util.Date;

public class PacchettoDTO {

	
	private static final int hiddennumber =334455; 
	private int idPacchetto;
	private CittaDTO citta;
	private double prezzo;
	private int sconto;
	
	//variabile che contiene il valore dell'ID (da decodificare dall'EJB) per la ricerca by ID
	private int id_per_ricerca;
	
	private String tipocamera;
	
	private String descrizione_categoria;
	private Date partenza;
	private Date ritorno;
	private UtenteDTO creato_da;
	private int deleted;
	private int disponibilita;
	
	private int custom;
	private UtenteDTO custom_da;
	
	private ArrayList<EscursioneDTO> escursionis;
	
	private AlloggioDTO alloggi;

	private TrasportoSingoloDTO trasportAndata;
	private TrasportoSingoloDTO trasportRitorno;
	
	private CategoriaDTO categorie;
	
	public double getPrezzoScontato(){
		
		return (double) Math.round((prezzo*(100-sconto)/100) * 100) / 100;
	}
	
	
	/**
	 * Metodo da chiamare al posto di getIdPacchetto quando si visualizza il pacchetto
	 * 
	 * @return String  l'identificativo del pacchetto per il cliente
	 */
	public String getClientIdPkg(){
		
		return "PoliTravelDream"+(this.idPacchetto+hiddennumber);
	
	}
	
	
	/**
	 * Metodo da chiamare quando, inserito l'id pacchetto fasullo, si deve ricercarlo nel DB
	 * 
	 */
	public void setRealId(String packetId){
		
		Integer real = null;
		String s = new String(packetId.substring(15));
		
		real =(new Integer(s)).intValue();
		
		this.idPacchetto = real.intValue() - hiddennumber;
		
		
	}
	
	
	
	
	//getter e setter
	
	
	public int getIdPacchetto() {
		return idPacchetto;
	}
	public void setIdPacchetto(int idPacchetto) {
		this.idPacchetto = idPacchetto;
	}
	public UtenteDTO getCreato_da() {
		return creato_da;
	}
	public void setCreato_da(UtenteDTO creato_da) {
		this.creato_da = creato_da;
	}
	public int getDeleted() {
		return deleted;
	}
	public void setDeleted(int deleted) {
		this.deleted = deleted;
	}
	public int getCustom() {
		return custom;
	}
	public void setCustom(int custom) {
		this.custom = custom;
	}
	public ArrayList<EscursioneDTO> getEscursionis() {
		return escursionis;
	}
	public void setEscursionis(ArrayList<EscursioneDTO> escursionis) {
		this.escursionis = escursionis;
	}
	public AlloggioDTO getAlloggi() {
		return alloggi;
	}
	public void setAlloggi(AlloggioDTO alloggi) {
		this.alloggi = alloggi;
	}
	public TrasportoSingoloDTO getTrasportAndata() {
		return trasportAndata;
	}
	public void setTrasportAndata(TrasportoSingoloDTO trasportAndata) {
		this.trasportAndata = trasportAndata;
	}
	public TrasportoSingoloDTO getTrasportRitorno() {
		return trasportRitorno;
	}
	public void setTrasportRitorno(TrasportoSingoloDTO trasportRitorno) {
		this.trasportRitorno = trasportRitorno;
	}
	public CategoriaDTO getCategorie() {
		return categorie;
	}
	public void setCategorie(CategoriaDTO categorie) {
		this.categorie = categorie;
	}
	public CittaDTO getCitta() {
		return citta;
	}
	public void setCitta(CittaDTO citta) {
		this.citta = citta;
	}
	public double getPrezzo() {
		return prezzo;
	}
	public void setPrezzo(double prezzo) {
		this.prezzo = prezzo;
	}

	public int getSconto() {
		return sconto;
	}



	public void setSconto(int sconto) {
		this.sconto = sconto;
	}



	public String getDescrizione_categoria() {
		return descrizione_categoria;
	}
	public void setDescrizione_categoria(String descrizione_categoria) {
		this.descrizione_categoria = descrizione_categoria;
	}
	public Date getPartenza() {
		return partenza;
	}
	public void setPartenza(Date partenza) {
		this.partenza = partenza;
	}
	public Date getRitorno() {
		return ritorno;
	}
	public void setRitorno(Date ritorno) {
		this.ritorno = ritorno;
	}
	public int getId() {
		return idPacchetto;
	}
	public void setId(int id) {
		this.idPacchetto = id;
	}
	
	
	//Metodi di utility alla visualizzazione delle date nella tabella
	
	public String getdataPartenzaAsString(){
		return Utility.date2String(partenza);
	}
	
	public String getdataRitornoAsString(){
		return Utility.date2String(ritorno);
	}
	
	
	public void setDataPartenzaAsString(String data){
		System.out.println("DA TRADURRE"+data);
		this.partenza = Utility.string2Date(data);
	}
	
	public void setDataRitornoAsString(String data){
		this.ritorno = Utility.string2Date(data);
	}
	
	public String toString(){
		String ret = "";
		ret += "id: "+ idPacchetto +" \n" +
				//"citta: " + citta.getName() +" \n" +
				"prezzo: "+ prezzo+ "\n" +
				"partenza: " + getdataPartenzaAsString() +"\n" +
				"ritorno: "+ getdataRitornoAsString();
		return ret;
	}
	public UtenteDTO getCustom_da() {
		return custom_da;
	}
	public void setCustom_da(UtenteDTO custom_da) {
		this.custom_da = custom_da;
	}



	public int getId_per_ricerca() {
		return id_per_ricerca;
	}



	public void setId_per_ricerca(int id_per_ricerca) {
		this.id_per_ricerca = id_per_ricerca;
	}


	public int getDisponibilita() {
		return disponibilita;
	}


	public void setDisponibilita(int disponibilita) {
		this.disponibilita = disponibilita;
	}


	public String getTipocamera() {
		return tipocamera;
	}

	public int getTipoCameraAsInt(){

		if(tipocamera.equalsIgnoreCase("singola"))
			return 1;

		if(tipocamera.equalsIgnoreCase("doppia"))
			return 2;

		if(tipocamera.equalsIgnoreCase("tripla"))
			return 3;
		
		return 4;
	}

	public void setTipocamera(String tipocamera) {
		this.tipocamera = tipocamera;
	}
	
	
	public Date getdataPartenza(){
		return partenza;
	}
	
	public Date getdataRitorno(){
		return ritorno;
	}
	
	/**
	 * Metodo utilizzato dall'interfaccia grafica per settare il tipo di camera selezionato
	 * nella creazione di un nuovo pacchetto.
	 * 
	 * @param a - {@link DisponibilitaDTO} contenente il tipo di camera selezionato
	 */
	public void setTipoCameraFromAlloggio(DisponibilitaDTO a){
		this.tipocamera = a.getTipoCamera();
		if(this.custom==1){
		this.alloggi.setPrezzo(a.getPrezzo());
		}
	}
	
	/**
	 * Metodo utilizzato dall'interfaccia grafica per ottenere il tipo di camera selezionato
	 * nella creazione di un nuovo pacchetto.
	 * 
	 * @param a - {@link DisponibilitaDTO} contenente il tipo di camera selezionato
	 */
	public DisponibilitaDTO getTipoCameraFromAlloggio(){
		DisponibilitaDTO d = new DisponibilitaDTO();
		d.setTipoCamera(tipocamera);
		return d;
	}

}
